﻿<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="https://www.tbst.dk/Koerselskontorer"
xmlns="https://www.tbst.dk/Koerselskontorer"
elementFormDefault="qualified">

<xs:element name ="TaxiData">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="DeliveryHeader">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="TransportOfficeCVR" type="CVR"/>
            <xs:element name="TransportOfficeDatadeliveryIdentifier" type="xs:string"/>
            <xs:element name="DataperiodStartDatetime" type="xs:dateTime"/>
            <xs:element name="DataperiodEndDatetime" type="xs:dateTime"/>
            <xs:element name="AuthorityOrderInfo">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="AuthorityOrderId" type="xs:string"/>
                  <xs:element name="AuthorityOrderName" type="xs:string"/>
                </xs:sequence>
              </xs:complexType>
            </xs:element>
            <xs:element name="DataDeliveryOfficerInfo">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="DataDeliveryOfficerName" type="xs:string"/>
                  <xs:element name="DataDeliveryOfficerEmail" type="EmailAddress"/>
                  <xs:element name="DataDeliveryOfficerPhoneNumber" type="PhoneNumber" minOccurs="0"/>
                </xs:sequence>
              </xs:complexType>
            </xs:element>
            <!-- To indicate whether this is filtrated by Haulier or Driver and if it IS, the information must be filled in-->
            <xs:element name="HaulierFiltration">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="IsThisFilteredByHaulier" type="FiltrationOption"/>
                  <xs:element name="HauliersCVR" type="CVR" minOccurs="0" maxOccurs="unbounded"/>
                </xs:sequence>
              </xs:complexType>
            </xs:element>
            <xs:element name="DriverFiltration">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="IsThisFilteredByDriver" type="FiltrationOption"/>
                  <xs:element name="DriverInformation" type="DriverInformation" minOccurs="0" maxOccurs="unbounded"/>
                </xs:sequence>
              </xs:complexType>
            </xs:element>
	    <xs:element name="CarFiltration">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="IsThisFilteredByCar" type="FiltrationOption"/>
                  <xs:element name="CarRegistrationnumber" type="RegistrationNumber" minOccurs="0" maxOccurs="unbounded"/>
                </xs:sequence>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="Shift" minOccurs="1" maxOccurs="unbounded">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="ShiftId" type="xs:string"/>
            <xs:element name="ShiftStartDateTime" type="xs:dateTime"/>
            <xs:element name="ShiftEndDateTime" type="xs:dateTime"/>
            <xs:element name="ShiftDriver" type="DriverInformation"/>
            <xs:element name="HaulierCVR" type="CVR"/>
            <xs:element name="UsedVehicleRegistrationNumber" type="RegistrationNumber"/>
            <xs:element name="KmStart" type="xs:positiveInteger"/>
            <xs:element name="KmEnd" type="xs:positiveInteger"/>
            <xs:element name="Ride" minOccurs="0" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="RideId" type="xs:string"/>
                  <xs:element name="RideStartDateTime" type="xs:dateTime"/>
                  <xs:element name="RideEndDateTime" type="xs:dateTime"/>
                  <xs:element name="RideDistanceKm" type="xs:decimal"/>
                  <xs:element name="RidePriceDKK" type="xs:decimal"/>
                  <xs:element name="RideType" type="TaxiRideType"/>
                  <xs:element name="PaymentType" type="PaymentType"/>
                  <xs:element name="RideStartGeoCoordinate" type="GeoCoordinate"/>
                  <xs:element name="RideEndGeoCoordinate" type="GeoCoordinate"/>
                </xs:sequence>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType> 
</xs:element>

  <!-- Custom type definitions-->
  <xs:simpleType name="CVR">
    <xs:restriction base="xs:string">
      <xs:length value="8" />
      <xs:pattern value="[0-9]{8}"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="PhoneNumber">
    <xs:restriction base="xs:string">
      <xs:pattern value="\+?\d+"/>
    </xs:restriction>
  </xs:simpleType>
  
  <xs:simpleType name="EmailAddress">
    <xs:restriction base="xs:string">
      <xs:pattern value="[^@]+@[^\.]+\..+"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="RegistrationNumber">
    <xs:restriction base="xs:string">
      <xs:pattern value="[a-zA-Z0-9]*"/>
    </xs:restriction>
  </xs:simpleType>


  <xs:complexType name="GeoCoordinate">
    <xs:sequence>
      <xs:element name="Latitude" type="xs:decimal"/>
      <xs:element name="Longitude" type="xs:decimal"/>
    </xs:sequence>
  </xs:complexType>

  <xs:simpleType name="TaxiRideType">
    <xs:restriction base="xs:string">
      <xs:enumeration value="StreetRide"/>
      <xs:enumeration value="ByPhoneOrAppOrWebSite"/>
      <xs:enumeration value="ByContractPublicAuthority"/>
      <xs:enumeration value="ByContractOther"/>
      <xs:enumeration value="PlaceholderRide"/>
	<!--This value 'PlaceholderRide' should only used if there is a correction in price that is related to a ride that IS NOT included in this dataset-->
    </xs:restriction>
  </xs:simpleType>
  
  <xs:simpleType name="PaymentType">
    <xs:restriction base="xs:string">
      <xs:enumeration value="TaxameterDecided"/>
      <xs:enumeration value="FixedPrice"/>
      <xs:enumeration value="ByOtherMethod"/>
	<!--The value 'ByOtherMethod' should only used after consultation with the authority (tbst)-->
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="FiltrationOption">
    <xs:restriction base="xs:string">
      <xs:enumeration value="Yes"/>
      <xs:enumeration value="No"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:complexType name ="DriverInformation">
    <xs:sequence>
      <xs:element name="DriversChauffeurLicense" type="xs:string" />
      <xs:element name="AuthorityThatIssuedDriverPermission" type="AuthorityForTaxi"/>
    </xs:sequence>
  </xs:complexType>

  <xs:simpleType name="AuthorityForTaxi">
    <xs:restriction base="xs:string">
        <xs:enumeration value="Assens Kommune"/>
        <xs:enumeration value="Billund Kommune"/>
        <xs:enumeration value="Bornholms Regionskommune"/>
        <xs:enumeration value="Brønderslev Kommune"/>
        <xs:enumeration value="Esbjerg Kommune"/>
        <xs:enumeration value="Fanø Kommune"/>
        <xs:enumeration value="Favrskov Kommune"/>
        <xs:enumeration value="Faxe Kommune"/>
        <xs:enumeration value="Fredericia Kommune"/>
        <xs:enumeration value="Frederikshavn Kommune"/>
        <xs:enumeration value="Faaborg-Midtfyn Kommune"/>
        <xs:enumeration value="Greve Kommune"/>
        <xs:enumeration value="Guldborgsund Kommune"/>
        <xs:enumeration value="Haderslev Kommune"/>
        <xs:enumeration value="Hedensted Kommune"/>
        <xs:enumeration value="Herning Kommune"/>
        <xs:enumeration value="Hjørring Kommune"/>
        <xs:enumeration value="Holbæk Kommune"/>
        <xs:enumeration value="Holstebro Kommune"/>
        <xs:enumeration value="Horsens Kommune"/>
        <xs:enumeration value="Ikast-Brande Kommune"/>
        <xs:enumeration value="Jammerbugt Kommune"/>
        <xs:enumeration value="Kalundborg Kommune"/>
        <xs:enumeration value="Kerteminde Kommune"/>
        <xs:enumeration value="Kolding Kommune"/>
        <xs:enumeration value="Køge Kommune"/>
        <xs:enumeration value="Langeland Kommune"/>
        <xs:enumeration value="Lejre Kommune"/>
        <xs:enumeration value="Lemvig Kommune"/>
        <xs:enumeration value="Lolland Kommune"/>
        <xs:enumeration value="Læsø Kommune"/>
        <xs:enumeration value="Mariagerfjord Kommune"/>
        <xs:enumeration value="Middelfart Kommune"/>
        <xs:enumeration value="Morsø Kommune"/>
        <xs:enumeration value="Norddjurs Kommune"/>
        <xs:enumeration value="Nordfyns Kommune"/>
        <xs:enumeration value="Nyborg Kommune"/>
        <xs:enumeration value="Næstved Kommune"/>
        <xs:enumeration value="Odder Kommune"/>
        <xs:enumeration value="Odense Kommune"/>
        <xs:enumeration value="Odsherred Kommune"/>
        <xs:enumeration value="Randers Kommune"/>
        <xs:enumeration value="Rebild Kommune"/>
        <xs:enumeration value="Ringkøbing-Skjern Kommune"/>
        <xs:enumeration value="Ringsted Kommune"/>
        <xs:enumeration value="Roskilde Kommune"/>
        <xs:enumeration value="Samsø Kommune"/>
        <xs:enumeration value="Silkeborg Kommune"/>
        <xs:enumeration value="Skanderborg Kommune"/>
        <xs:enumeration value="Skive Kommune"/>
        <xs:enumeration value="Slagelse Kommune"/>
        <xs:enumeration value="Solrød Kommune"/>
        <xs:enumeration value="Sorø Kommune"/>
        <xs:enumeration value="Stevns Kommune"/>
        <xs:enumeration value="Struer Kommune"/>
        <xs:enumeration value="Svendborg Kommune"/>
        <xs:enumeration value="Syddjurs Kommune"/>
        <xs:enumeration value="Sønderborg Kommune"/>
        <xs:enumeration value="Thisted Kommune"/>
        <xs:enumeration value="Tønder Kommune"/>
        <xs:enumeration value="Varde Kommune"/>
        <xs:enumeration value="Vejen Kommune"/>
        <xs:enumeration value="Vejle Kommune"/>
        <xs:enumeration value="Vesthimmerlands Kommune"/>
        <xs:enumeration value="Viborg Kommune"/>
        <xs:enumeration value="Vordingborg Kommune"/>
        <xs:enumeration value="Ærø Kommune"/>
        <xs:enumeration value="Aabenraa Kommune"/>
        <xs:enumeration value="Aalborg Kommune"/>
        <xs:enumeration value="Aarhus Kommune"/>
        <xs:enumeration value="Rudersdal Kommune"/>
        <xs:enumeration value="Rødovre Kommune"/>
        <xs:enumeration value="Samsø Kommune"/>
        <xs:enumeration value="Silkeborg Kommune"/>
        <xs:enumeration value="Skanderborg Kommune"/>
        <xs:enumeration value="Skive Kommune"/>
        <xs:enumeration value="Slagelse Kommune"/>
        <xs:enumeration value="Solrød Kommune"/>
        <xs:enumeration value="Sorø Kommune"/>
        <xs:enumeration value="Stevns Kommune"/>
        <xs:enumeration value="Struer Kommune"/>
        <xs:enumeration value="Svendborg Kommune"/>
        <xs:enumeration value="Syddjurs Kommune"/>
        <xs:enumeration value="Sønderborg Kommune"/>
        <xs:enumeration value="Thisted Kommune"/>
        <xs:enumeration value="Tønder Kommune"/>
        <xs:enumeration value="Tårnby Kommune"/>
        <xs:enumeration value="Vallensbæk Kommune"/>
        <xs:enumeration value="Varde Kommune"/>
        <xs:enumeration value="Vejen Kommune"/>
        <xs:enumeration value="Vejle Kommune"/>
        <xs:enumeration value="Vesthimmerlands Kommune"/>
        <xs:enumeration value="Viborg Kommune"/>
        <xs:enumeration value="Vordingborg Kommune"/>
        <xs:enumeration value="Ærø Kommune"/>
        <xs:enumeration value="Aalborg Kommune"/>
        <xs:enumeration value="Aarhus Kommune"/>
        <xs:enumeration value="Hovedstadens Taxinævn"/>
        <xs:enumeration value="Trafik-, Bygge- og Boligstyrelsen"/>
        <xs:enumeration value="Anden myndighed"/>
    </xs:restriction>
  </xs:simpleType>

</xs:schema>